#coding=utf-8
'''
存储所有常量，以及全局变量
'''
import cv2
import datetime
import logging
import threading

'''
测试版和正式版标志，0表示正式版，1表示测试版，不同版本代码逻辑不同，根据命令行参数来
'''
TEST = '1'


'''
网络通信url部分
'''
URL_REAL = 'https://www.hitschoolbus.xyz'

URL = 'http://192.168.199.216:8888'

passage_URL =  '/passagerqrcode'  # 上传乘客二维码的网址

driver_URL =  '/driverqrcode'     # 上传司机二维码的网址

platform_URL =  '/platformQuery'       # 查询站点的gps位置的位置

platform_arrive_URL =  '/platformArrive'   # 车辆到达站点，向服务器传送到达信息的网址

GPS_URL =  '/gps'                 # 上传gps数据的post请求地址（所有车辆共享一个地址，根据post的请求参数区分）

TEST_URL =  '/testNetwork'   # 测试http网络是否正常

OVER_URL =  'over'   # 查询树莓派是否可以停止工作



'''
树莓派身份信息，状态信息 标识部分
'''
blank = 'blank'        # 标识本树莓派的id，空白身份为blank, 绑定树莓派的车牌号和司机id

BUS_ID = blank         # 树莓派绑定的车辆车牌号
DRIVER_ID = blank      # 树莓派绑定的司机号
old_BUS_ID = blank     # 上一次完成工作的车牌号
old_DRIVER_ID = blank  # 上一次完成工作的司机的id
BUS_STATUS = -1        # (-1, "树莓派未准备完毕")(1,"正向运行中"),(2,"反向运行中"), (0,"停运"), (3,"起点等待"),(4,"终点等待")
OLD_BUS_STATUS = -1    # 上一次的bus status
'''
关于合并RUNNING_STATUS，BUS_START，BUS_STATUS三个状态为一个BUS_STATUS的设计：
BUS_STATUS = -1 ，代表树莓派关机，或者开机并未绑定车辆信息状态，相当于 RUNNING_STATUS = 0
BUS_STATUS = 0， 代表树莓派已绑定车辆信息，但是并未开至路线的起点开始正式运行，相当于 RUNNING_STATUS = 0 但 BUS_START = 0 
BUS_STATUS > 0，代表车辆已经从起点开始，开始了正式的运营，相当于  RUNNING_STATUS = 1 且 BUS_START = 1
见设计图：https://www.processon.com/diagraming/6069bf3de401fd13005054bc
'''
DRIVER_QRCODE_TIME = datetime.datetime.now()
DRIVER_TIMEDELTA = datetime.timedelta(seconds=15)  # 设置司机上班打卡时间间隔为30秒
qrcode_count = 0                                   # 每天的扫描的二维码次数



'''
二维码扫码部分

司机的二维码格式(字符串)：   'driver_id:xxxxxxxx,bus_id:xxxxxx'      driver_id是司机的工号，bus_id是车牌号
'''
driver = 'driver_id'               # 用于司机二维码字符串中搜索的字段
old_passagers = {'first', 'last'}  # 用于存储所有扫描过的乘客二维码的集合set



'''
open cv 部分
'''
font = cv2.FONT_HERSHEY_SIMPLEX # openCV 字体
cap = cv2.VideoCapture(0)       # 0: use CSI camera,1：use USB camera
cap.set(3,480)       # set Width
cap.set(4,360)       # set Height



'''
gps部分
'''
LONGITUDE = 0.0  # 经度和纬度（十进制）
LATITUDE = 0.0

OLD_LONGITUDE = 0.0
OLD_LATITUDE = 0.0
THRESHOLD = 0.0008   # 阈值，当经纬度之差小于这个阈值时，认为车辆进站（出站），详细设置请看有道笔记

LON_REVISION = 0.0054369220  # 经纬度的修正值
LA_REVISION = 0.0016467053 

gps_flag = 0       # 测试使用，用于生成模拟gps数据
gps_count = 0      # 用于记录gps次数，每隔10次，就写入一次log文件
GPS_AVAILABLE = 0  # 表名GPS是否有效
GPS_TOTAL = 0.0    # GPS总共的采集次数
GPS_FAIL_COUNT = 0  # GPS失效次数
gps_test_lon_list = [] # 统计测试数据GPS的经度
gps_test_la_list = []  # 统计测试数据GPS的纬度



'''
站台的信息的数据结构
'''
platform_pk = []         # 存储每个站点在数据库的主键，用于判断站点顺序，默认按顺序存储从起点站到终点站
platform_name = []       # 存储站点名称的字符串列表
platform_longitude = []  # 存储站点经度的浮点数列表
platform_latitude = []   # 存储站点纬度的浮点数列表

OLD_PLATFORM = -1            # 车辆经过的上一个站点，在列表中的下标（默认值-1）
NOW_PLATFORM = -1            # 车辆当前正处于的站点的下标（用于离站判断）
NEXT_PLATFORM = 1            # 车辆即将要到达的下一站的下标
HAVE_SEND_LEAVE_MESSAGE = 0  # 补丁：表示已经发送过离站信息了



'''
log 日志（日志文件名，日志格式）
'''
LOG_FILENAME = 'bus.log'
LOG_FORMAT = "%(asctime)s - %(levelname)s - %(message)s"



'''
同步锁，用于控制共享变量的访问
'''
config_lock = threading.Lock()


'''
DES对称秘钥加密的秘钥，用于司机二维码加密
'''
DES_SECRET_KEY = '12345678'



'''
控制二维码线程的死循环结束
控制GPS的死循环结束
0表示不用结束，1表示循环需要结束
'''
QRCODE_STOP = 0
GPS_STOP = 0


